package monopoli.gui;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 *
 * @author Marco
 */
public class IniParser {

    //Attributes
    private BufferedReader file;
    private String fileName;

    /**
     * Creazione del parser.
     */
    public IniParser(String fileName) throws FileNotFoundException {
        this.fileName = fileName;

        try {
            file = new BufferedReader(new FileReader(fileName));
        } catch (FileNotFoundException e) {
            throw (e);
        }
    }

    /**
     * Ritorna il nome del file INI.
     */
    private String getFileName() {

        return fileName;

    }

    /**
     * Chiusura dei flussi di I/O con il file INI.
     */
    public void close() {
        try {
            file.close();
        } catch (IOException e) {
        }
    }

    /**
     * Recupera il valore di un parametro nel file INI.
     */
    public String getValue(String header, String name) {
        return getValue(header, name, 1);
    }

    /**
     * Recupera il valore di un parametro nel file INI.
     */
    public String getValue(String header, String name, int position) {
        String value = "";
        String section = "";
        String line = "";
        header = "[" + header + "]";

        int index = 0;
        boolean flag = true;
        try {
            close();
            file = new BufferedReader(new FileReader(fileName));

            for (line = file.readLine(); line != null && flag;) {
                if (!line.equals("")) {
                    if (line.substring(0, 1).equals("[") && line.substring(line.length() - 1, line.length()).equals("]")) {
                        section = line;
                    } else if (section.equals(header) && name.equals(line.substring(0, line.indexOf('=')))) {
                        ++index;
                        if (index == position) {
                            value = line.substring(line.indexOf('=') + 1, line.length());
                            flag = false;
                        }
                    }
                }
                line = file.readLine();
            }
        } catch (IOException e) {
        }

        if (value.equals("")) {
            value = null;
        }

        return value;
    }

    /**
     * Conta il numero di occorrenze con cui un parametro si presenta nel file INI.
     */
    public int getOccurrency(String header, String name) {
        int i = 0;
        while (getValue(header, name, ++i) != null);

        return i - 1;
    }
}
